##
## Material para replicação
## Título: Gênero, dinâmicas de poder intrapartidárias e manterrupting no Legislativo
## Autores: Mauricio Izumi e Debora Thome
##

#diretório de trabalho
setwd("C:\\Users\\Mauricio\\Desktop\\pc\\pesquisas\\discursos_sf\\replication\\")
set.seed(1234)

#carrega pacotes
library(data.table)
library(dplyr)
#devtools::install_github("IQSS/Zelig")
library(Zelig)
library(ggplot2)

#carrega funções
##função para fazer o gráfico
plot.int <- function(s.out, ylab){
#média e CI
	mean.mulher <- mean(s.out$sim.out$range[[1]]$ev[[1]])
	q025.mulher <- quantile(s.out$sim.out$range[[1]]$ev[[1]], probs = .025)
	q975.mulher <- quantile(s.out$sim.out$range[[1]]$ev[[1]], probs = .975)

	mean.mulher.lider <- mean(s.out$sim.out$range[[2]]$ev[[1]])
	q025.mulher.lider <- quantile(s.out$sim.out$range[[2]]$ev[[1]], probs = .025)
	q975.mulher.lider <- quantile(s.out$sim.out$range[[2]]$ev[[1]], probs = .975)

	mean.homem <- mean(s.out$sim.out$range1[[1]]$ev[[1]])
	q025.homem <- quantile(s.out$sim.out$range1[[1]]$ev[[1]], probs = .025)
	q975.homem <- quantile(s.out$sim.out$range1[[1]]$ev[[1]], probs = .975)

	mean.homem.lider <- mean(s.out$sim.out$range1[[2]]$ev[[1]])
	q025.homem.lider <- quantile(s.out$sim.out$range1[[2]]$ev[[1]], probs = .025)
	q975.homem.lider <- quantile(s.out$sim.out$range1[[2]]$ev[[1]], probs = .975)

#cria a tabela para o plot
	sexo <- c("Mulher","Mulher","Homem","Homem")
	lider <- c("Não líder\npartidário","Líder partidário","Não líder\npartidário","Líder partidário")
	media <- c(mean.mulher, mean.mulher.lider, mean.homem, mean.homem.lider)
	lower <- c(q025.mulher, q025.mulher.lider, q025.homem, q025.homem.lider)
	upper <- c(q975.mulher, q975.mulher.lider, q975.homem, q975.homem.lider)
	temp <- data.frame(sexo, lider, media, lower, upper)

#plot
	ggplot(temp, aes(x = sexo, y = media)) +
		facet_wrap(.~ lider) +
		geom_linerange(aes(ymax = upper, ymin = lower), size = 1.3) +
		geom_point(size = 5) +
		xlab("") +
		ylab(ylab) +
		theme_bw() 
}

#carrega dados
tab <- fread("finalKLDParty.csv.gz")
tab <- data.frame(tab)

#####################

##
## Tabela 1: Frequência e porcentagem de senadores mulheres e 
##           discursos de mulheres por legislatura
##

##Senadoras
#por legislatura
temp <- unique(tab[,c("legislatura","id_sen","mulher")])
tot <- temp %>%
	group_by(legislatura) %>%
	summarize(n = n())
tot.f <- temp %>%
	filter(mulher == 1) %>%
	group_by(legislatura) %>%
	summarize(n = n())
tot.f$n <- paste0(tot.f$n, " (", round(tot.f$n/tot$n*100,2), "%)")

#total
temp <- unique(tab[,c("id_sen","mulher")])
tot.tot <- temp %>%
	filter(mulher == 1) %>%
	summarize(n = n())
tot.tot$n <- paste0(tot.tot$n, " (", round(tot.tot$n/nrow(temp)*100,2), "%)")
tot.tot <- c("Total",tot.tot$n)
tot.f <- rbind(tot.f, tot.tot)
tot.f

##Discursos de mulheres
#total by legislature
tot <- tab %>%
	group_by(legislatura) %>%
	summarize(n = n())
tot.f <- tab %>%
	filter(mulher == 1) %>%
	group_by(legislatura) %>%
	summarize(n = n())
tot.f$n <- paste0(tot.f$n, " (", round(tot.f$n/tot$n*100,2), "%)")

#total
tot.tot <- tab %>%
	filter(mulher == 1) %>%
	summarize(n = n())
tot.tot$n <- paste0(tot.tot$n, " (", round(tot.tot$n/nrow(tab)*100,2), "%)")
tot.tot <- c("Total",tot.tot$n)
tot.f <- rbind(tot.f, tot.tot)
tot.f

###############################

##
## Figura 1:  Probabilidade de ter o discurso interrompido por Sexo
##

#lista de variáveis dependentes
vd <- c("quest.other","quest.part","quest",
	  "apart.other","apart.party",
	  "aparte.M","aparte.H","aparte")

vd.cod <- NULL
for(i in 1:length(vd)){
	vd.cod[i] <- which(colnames(tab) == vd[i])
}

#zelig
z.out <- NULL
x.mulher <- NULL
x.homem <- NULL
s.out <- list(NULL)
for(i in 1:length(vd)){
#modelos
	z.out <- zelig(tab[,vd.cod[i]] ~ mulher + 
		as.factor(main.topic.autor) +
		as.factor(legislatura) +
		n.words.autor +
		coalizao + n_legs + 
		as.factor(sigla_junta) +
		lider_part + lider_gov,
		data = tab,
		model = "logit")

#define variáveis explicativas
	x.mulher <- setx(z.out, mulher = 1)
	x.homem <- setx(z.out, mulher = 0)

#simula quantidades de interesse
	s.out[[i]] <- sim(z.out, x = x.mulher, x1 = x.homem)
}

#primeira diferença
m.mulher <- NULL
m.homem <- NULL
m.fd <- NULL
q025.fd <- NULL
q975.fd <- NULL
for(i in 1:length(vd)){
	m.mulher[i] <- mean(s.out[[i]]$sim.out$x$ev[[1]])
	m.homem[i] <- mean(s.out[[i]]$sim.out$x1$ev[[1]])
	m.fd[i] <- mean(s.out[[i]]$sim.out$x1$fd[[1]])
	q025.fd[i] <- quantile(s.out[[i]]$sim.out$x1$fd[[1]], probs = .025)
	q975.fd[i] <- quantile(s.out[[i]]$sim.out$x1$fd[[1]], probs = .975)
}
temp.fd <- data.frame(vd, m.mulher, m.homem, m.fd, q025.fd, q975.fd)
temp.fd$cresc.p <- (temp.fd$m.mulher - temp.fd$m.homem)/temp.fd$m.homem

##plot
#média e CI
mean.mulher <- NULL
q025.mulher <- NULL
q975.mulher <- NULL
mean.homem <- NULL
q025.homem <- NULL
q975.homem <- NULL
for(i in 1:length(vd)){
	mean.mulher[i] <- mean(s.out[[i]]$sim.out$x$ev[[1]])
	q025.mulher[i] <- quantile(s.out[[i]]$sim.out$x$ev[[1]], probs = .025)
	q975.mulher[i] <- quantile(s.out[[i]]$sim.out$x$ev[[1]], probs = .975)

	mean.homem[i] <- mean(s.out[[i]]$sim.out$x1$ev[[1]])
	q025.homem[i] <- quantile(s.out[[i]]$sim.out$x1$ev[[1]], probs = .025)
	q975.homem[i] <- quantile(s.out[[i]]$sim.out$x1$ev[[1]], probs = .975)
}

#cria a tabela para o plot
variavel <- c(vd,vd)
y <- c(1:length(vd),(1:length(vd)+.2))
sexo <- c(rep("Mulher", length(vd)), rep("Homem", length(vd)))
media <- c(mean.mulher, mean.homem)
lower <- c(q025.mulher, q025.homem)
upper <- c(q975.mulher, q975.homem)
temp <- data.frame(variavel, y, sexo, media, lower, upper)
temp1 <- data.frame(vd, y = 1:length(vd))

#renomeia as variáveis
temp$variavel <- ifelse(temp$variavel == "aparte", "Interrompido",
		     ifelse(temp$variavel == "aparte.H", "Interrompido\npor homem",
		     ifelse(temp$variavel == "aparte.M", "Interrompido\npor mulher",
		     ifelse(temp$variavel == "apart.other", "Interrompido por membro\nde outro partido",
		     ifelse(temp$variavel == "apart.party", "Interrompido por membro\ndo próprio partido",
		     ifelse(temp$variavel == "quest", "Recebeu questão",
		     ifelse(temp$variavel == "quest.part", "Recebeu questão\nde membro do próprio partido",
		     ifelse(temp$variavel == "quest.other", "Recebeu questão\nde membro de outro partido", "ERRO"))))))))

temp1$vd <- ifelse(temp1$vd == "aparte", "Interrompido",
		     ifelse(temp1$vd == "aparte.H", "Interrompido\npor homem",
		     ifelse(temp1$vd == "aparte.M", "Interrompido\npor mulher",
		     ifelse(temp1$vd == "apart.other", "Interrompido por membro\nde outro partido",
		     ifelse(temp1$vd == "apart.party", "Interrompido por membro\ndo próprio partido",
		     ifelse(temp1$vd == "quest", "Recebeu questão",
		     ifelse(temp1$vd == "quest.part", "Recebeu questão\nde membro do próprio partido",
		     ifelse(temp1$vd == "quest.other", "Recebeu questão\nde membro de outro partido", "erro"))))))))

#plot
png("figura01.png", width = 1400, height = 1400, res = 200)
par(mar = c(6, 1, 3, 1))
plot(x = range(temp$lower, temp$upper),
	y = range(1:(length(vd)+1)),
	type = "n",
	cex = .5,
	ylim = c(1-.5, max(length(vd))+.5),
	xlim = c(-.1, .25),
	yaxs="i",
	axes=FALSE,
	xlab="", ylab="")

axis(1, at = seq(0,0.25,.05), labels = seq(0,0.25,.05), cex.axis = .8, lwd = 1.5, mgp = c(0,.5,0))
axis(3, at = seq(0,0.25,.05), labels = seq(0,0.25,.05), cex.axis = .8, lwd = 1.5, mgp = c(0,.5,0))
abline(v = seq(0,.25,.05), lwd = 1.5, col = gray(.95))

for(i in 1:nrow(temp)){
lines(y = c(temp$y[i],temp$y[i]),  ## line for confidence interval
	x = c(temp$lower[i], temp$upper[i]),
	lwd = 2)
}

points(x = temp$media,
	 y = temp$y,
	 cex = 1.5,
	 pch = 16,
	 col = ifelse(temp$sexo == "Mulher", "black", "grey"))

for(i in 1:nrow(temp1)){
	text(0, temp1$y[i], temp1$vd[i], cex = .8, pos = 2)
}

legend("bottom", 
	inset = c(0, -.2), 
	legend=c("Mulher","Homem"), 
	pch = c(16,16), col = c("black","grey"),
	xpd = T,  horiz = T)
dev.off()

################################

##
## Looping para fazer as Figuras 2, 3, 4, 5, 6, 7, 8, 9
##

#lista de variáveis dependentes
vd <- c("quest.other","quest.part","quest",
	  "apart.other","apart.party",
	  "aparte.M","aparte.H","aparte")

vd.cod <- NULL
for(i in 1:length(vd)){
	vd.cod[i] <- which(colnames(tab) == vd[i])
}

#zelig
z.out <- NULL
x.mulher <- NULL
x.homem <- NULL
s.out <- list(NULL)
for(i in 1:length(vd)){
#modelos
	z.out <- zelig(tab[,vd.cod[i]] ~ mulher + 
		as.factor(main.topic.autor) +
		as.factor(legislatura) +
		n.words.autor +
		coalizao + n_legs + 
		as.factor(sigla_junta) +
		lider_part + lider_gov +
		lider_part:mulher,
		data = tab,
		model = "logit")

#define variáveis explicativas
	x.mulher <- setx(z.out, mulher = 1, lider_part = c(0,1))
	x.homem <- setx(z.out, mulher = 0, lider_part = c(0,1))

#simula quantidades de interesse
	s.out[[i]] <- sim(z.out, x = x.mulher, x1 = x.homem)
}
	
##plot
ylabs <- c("Probabilidade de receber uma questão\nde membro de outro partido",
	     "Probabilidade de receber uma questão\nde membro do próprio partido",
	     "Probabilidade de receber uma questão",
	     "Probabilidade de ser interrompido\npor membro de outro partido",
	     "Probabilidade de ser interrompido\npor membro do próprio partido",
	     "Probabilidade de ser interrompido\npor mulher",
	     "Probabilidade de ser interrompido\npor homem",
	     "Probabilidade e ser interrompido")

#exporta gráficos
anexos <- c("figura09","figura08","figura07",
		"figura06","figura05","figura04",
		"figura03","figura02")
for(i in 1:length(vd)){
	plot.int(s.out[[i]], ylabs[i])
	ggsave(paste0(anexos[i], ".png"),
		 width = 5, height = 3, dpi = 300)
}





